package com.itcast.googleplay;

import com.itcast.googleplay.factory.FragmentFactory;
import com.itcast.googleplay.fragment.BaseFragment;
import com.itcast.googleplay.ui.PagerTab;
import com.itcast.googleplay.utils.UIUtils;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;

public class MainActivity extends BaseActivity {

	private PagerTab pagerTab;
	private ViewPager viewPager;
	private DrawerLayout drawerlayout;
	private ActionBarDrawerToggle actionBarDrawerToggle;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		initView();
		initData();
		
	}

	private void initData() {
		//1.给ViewPager设置数据适配器
		//viewpager在设置数据适配器的时候,可以设置PagerAdapter
		//viewpager在设置数据适配器的时候,还可以设置FragmentPagerAdapter
		//差异???
		MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
		viewPager.setAdapter(adapter);
		pagerTab.setViewPager(viewPager);
		
		//通过监听选项卡,决定加载那个界面的数据
		pagerTab.setOnPageChangeListener(new OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int position) {
				//如果选中position索引指向的界面,则需要请求position指向界面的数据
				//1.根据索引获取fragment对象,fragment工厂
				BaseFragment baseFragment = FragmentFactory.getFragment(position);
				//0 对应 HomeFragment 代表首页
				//1 对应AppFragment   代表应用
				//2 对应GameFragment  代表游戏
				//......
				//6 对应HotFragment   代表排行
				
				
				//2.通过baseFragment持有的子类对象的引用,去调用请求网络的方法,要触发loadingPage中的show方法
				baseFragment.subShow();
			}
			
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				
			}
			
			@Override
			public void onPageScrollStateChanged(int arg0) {
				
			}
		});
	}

	private void initView() {
		pagerTab = (PagerTab) findViewById(R.id.pagertab);
		viewPager = (ViewPager) findViewById(R.id.viewpager);
		drawerlayout = (DrawerLayout) findViewById(R.id.drawerlayout);
		initActionBar();
	}
	private void initActionBar() {
		//1.获取actionBar对象
		ActionBar actionBar = getSupportActionBar();
		//2.修改actionBar图片和文字
		actionBar.setTitle("传智一期谷歌市场");
		actionBar.setIcon(R.drawable.ic_launcher);
		
		//3.设置左上角三条线的图片可见
		actionBar.setDisplayShowHomeEnabled(true);
		
		
		//设置actionBar左上角的按钮可以使用
		actionBar.setDisplayHomeAsUpEnabled(true);
		
		
		
		//4.将三条线的图片设置在actionbar上
		
		//actionbar左上角的按钮和DraweLayout管理的一个按钮
		//参数一:当前activity对象
		//参数二:包含了侧拉菜单的drawerLayout
		//参数三:和drawerLayout关联按钮的图片资源
		//参数四:开启侧拉菜单时候描述
		//参数五:关闭侧拉菜单时候描述
		
		actionBarDrawerToggle = new ActionBarDrawerToggle(
				this, 
				drawerlayout, 
				R.drawable.ic_drawer_am, 
				0, 
				0);
		//让按钮的状态和侧拉菜单的开启和关闭状态,同步,记录开启和关闭的状态
		actionBarDrawerToggle.syncState();
		//此行代码时为了添加一个缩回动画效果,所以才加上
		drawerlayout.setDrawerListener(actionBarDrawerToggle);
	}
	
//	public void onClickMethod(View view){
//		
//	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		//actionBar上的三条杠的按钮的点击事件触发方法
		if(item.getItemId() == android.R.id.home){
//			Toast.makeText(UIUtils.getContext(), "点中了按钮了......", 0).show();
			//问左侧的侧拉菜单是否开启
			boolean drawerOpen = drawerlayout.isDrawerOpen(Gravity.LEFT);
			if(drawerOpen){
				//如果侧拉菜单是开启的,点后关闭
				drawerlayout.closeDrawer(Gravity.LEFT);
			}else{
				//如果侧拉菜单是关闭的,点后开启
				drawerlayout.openDrawer(Gravity.LEFT);
			}
		}
		return super.onOptionsItemSelected(item);
	}
	
	
	class MyFragmentPagerAdapter extends FragmentPagerAdapter{
		private String[] stringArrays;
		public MyFragmentPagerAdapter(FragmentManager fm) {
			super(fm);
			//1.根据xml中定义的string-array的name,获取数组中的文字
			stringArrays = UIUtils.getStringArray(R.array.tab_names);
		}
		@Override
		public Fragment getItem(int position) {
			//在此处需要返回的界面肯定不一致,根据不同的position索引去返回不同的界面
			//封装到Fragment工厂类中编写
			Fragment fragment = FragmentFactory.getFragment(position);
			return fragment;
		}

		@Override
		public int getCount() {
			return stringArrays.length;
		}
		//返回选项卡标题内容
		@Override
		public CharSequence getPageTitle(int position) {
			return stringArrays[position];
		}
	}
}
